/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Distribuciones;

import entidad.FactoryDistribucion.DISTRIBUCION_NOMBRES;

/**
 *
 * @author USUARIO
 */
public class Poisson implements Distribucion{

    private double media;
    public static final DISTRIBUCION_NOMBRES nombre = DISTRIBUCION_NOMBRES.POISSON;
    public static final String[] parametros = {"media"};
    public static final String[] tipoParametros = {"double"};
    
    public Poisson(double k) {
        this.media = k;
    }

    @Override
    public String[] getParametros() {
        return parametros;
    }

    @Override
    public String[] getTipoParametros() {
        return tipoParametros;
    }

    public double getMedia() {
        return media;
    }

    /**
     * 
     * @param u
     * @return integer
     */
    @Override
    public double generar(double u){
        int x = 0;
        double p = Math.exp(-1*media);
        double Fx = p;
        while (u > Fx) {
            x++;
            p = p*media/x;
            Fx += p;
        }
        return x;
    }

    @Override
    public DISTRIBUCION_NOMBRES getNombre() {
        return nombre;
    }

    @Override
    public double calcularMedia() {
        return media;
    }

}
